// Red And Green
// oj.huawei.com
// 在美丽的尧山，有一个大广场，50周年校庆的时候Solo就在大广场上见证了史上最壮观的焰火。
// 在广场上有一排方砖是有颜色的，被涂上红色或者绿色，从左到右排列。
// 现在校方要求重新喷涂颜色，但不一定要每一块方砖都重新喷涂，
// 因为校方的目的是:每一块红色的方砖都至少在绿色方砖的左边
// (也就是每一个红的左边不能有绿的)，并且尽量喷涂最少的次数。
// 输入只有一行，包含一个字符串S，且只包含'R'(代表红色)或者'G'(代表绿色)。
// 我们保证字符串S的长度L的范围是(0<L<50 )。
// 输出需要重新喷涂的方砖的最少数量。
// 输入样例 RGRGR
// 输出样例 2
//解
//1.字符序列中有一个字符肯定是分界点，它的左边全为红色，右边全为绿色
//2.因此  该点的左边的绿色要翻转为红色  该点右边的红色要翻转成绿色
//3.统计每个点需要翻转的次数  从中找出最小的次数即为答案
//解2
// 1.一次遍历，记录绿色出现次数
// 2.要么左边绿全变红，要么这个红变绿
// GGGRRRGGGRRR
// [G] green:  1, DP:  0
// [G] green:  2, DP:  0
// [G] green:  3, DP:  0
// [R] green:  3, DP:  1
// [R] green:  3, DP:  2
// [R] green:  3, DP:  3
// [G] green:  4, DP:  3
// [G] green:  5, DP:  3
// [G] green:  6, DP:  3
// [R] green:  6, DP:  4
// [R] green:  6, DP:  5
// [R] green:  6, DP:  6
// 6
// RGGR
// [R] green:  0, DP:  0
// [G] green:  1, DP:  0
// [G] green:  2, DP:  0
// [R] green:  2, DP:  1
// 1

#include <bits/stdc++.h>
using namespace std;


int getMinPaint(string str) {
    int green = 0;
    int dp = 0;
    for (char c:str) {
        if (c == 'G') {
            green++;
        }else {
            dp = min(green, dp+1);
        }
        printf("[%c] green:%3d, dp:%3d\n", c, green, dp);
    }
    return dp;
}

int main() {
    string str;
    while(cin >> str) {
        int res = getMinPaint(str);
        cout << res << endl;
    }
    return 0;
}
